package com.yy.m3u8tool.parser;

import com.yy.m3u8tool.parser.M3u8Parser.ConvertListener;
import com.yy.m3u8tool.parser.M3u8Parser.ConvertState;
import com.yy.m3u8tool.parser.M3u8Parser.ConvertType;
import com.yy.m3u8tool.utils.LogUtil;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

public class M3u8File {

  /**
   * 状态：就绪、正在转换、完成
   */
  public @ConvertState String status;

  /**
   * m3u8文件的路径
   */
  public String fullPath;
  /**
   * 转换后应该放置的路径
   */
  public String convertedFullPath;
  /**
   * 视频路径列表
   */
  public ArrayList<String> videoList;
  /***小文件数*/
  public int fileNum;
  /**
   * 每秒的帧数
   */
  public int fps;
  /**
   * 单位毫秒，0.001s
   */
  public int timeLength;
  /**
   * 是否被选中
   */
  public boolean isChecked;
  /**
   * 在list中的位置
   */
  public int position;
  /**
   * 视频分片文件路径前缀
   */
  public String prefix;
  /**
   * 旋转
   */
  public int rotation;
  /**
   * 画面宽度
   */
  public int width;
  /**
   * 画面高度
   */
  public int height;
  /**
   * 编码器
   */
  public String videoCodec;
  /**
   * m3u8视频的总帧数，=timelength*fps
   */
  public int frames;

  public M3u8Parser parser;

  public M3u8File(String path) {
    status = ConvertState.STATUS_READY;
    fullPath = path;
    convertedFullPath = path.replaceAll("(.+)\\.(m|M)3(u|U)8", "$1") + ".mp4";
    videoList = new ArrayList<>();
    fileNum = 0;
    fps = 0;
    timeLength = 0;
    isChecked = true;
    rotation = 0;
    width = 0;
    height = 0;
    videoCodec = null;

    try {
      parser=new M3u8Parser(this);
    } catch (IOException e) {
      LogUtil.e(e.getMessage());
    }
  }

  public void setM3u8Frames() throws IOException {
    fileNum = videoList.size();
    frames = timeLength / 1000 * this.fps;
    File ts0 = new File(videoList.get(0));
    prefix = ts0.getCanonicalFile().getParent();
  }

  public void convert(@ConvertType int type, ConvertListener listener){
    if(isChecked && parser!=null){
      parser.startConvert(type,listener);
    }
  }

}
